package no65;

/**
 * @author 兴趣使然黄小黄
 * @version 1.0
 * @date 2023/5/16 22:52
 * II 不用加减乘除做加法
 * https://leetcode.cn/problems/bu-yong-jia-jian-cheng-chu-zuo-jia-fa-lcof/
 */
public class Solution2 {

    // 位运算做加法
    public int add(int a, int b) {
        // eg. 3 + 2 -> 011 + 010 = 101
        int res = a ^ b; // 不考虑进位的情况下, 两数之和为异或运算
        int carry = (a & b) << 1; // 表示进位
        while (carry != 0) {
            // 如果有进位, 则反复迭代, 与进位相加
            int temp = res; // 记录旧值, 便于计算进位
            res = res ^ carry;
            carry = (temp & carry) << 1; // 更新进位
        }
        return res;
    }
}
